/*
 * BitSet.hpp
 *
 *  Created on: 2013-1-16
 *      Author: heqiu
 */

#ifndef BITSET_HPP_
#define BITSET_HPP_

#include "mycomm.h"

class BitSet {
public:
	BitSet() {
		m_uiSize = 0;
		m_pArray = NULL;
	}
	~BitSet() {
		if (m_pArray != NULL) {
			delete[] m_pArray;
			m_pArray = NULL;
		}
	}
	void init(uint32_t uiSize) {
		m_uiSize = uiSize;
		uint32_t uiSet = m_uiSize / 64 + 1;
		m_pArray = new bitset<64> [uiSet];
	}
	bool setBit(uint32_t uiPos, bool bFlag) {
		if (uiPos < m_uiSize) {
			uint32_t uiNo = uiPos / 64;
			uint32_t uiKey = uiPos % 64;
			if (bFlag) {
				m_pArray[uiNo].set(uiKey);
			} else {
				m_pArray[uiNo].reset(uiKey);
			}
		}
		return false;
	}
	bool getBit(uint32_t uiPos) {
		if (uiPos < m_uiSize) {
			uint32_t uiNo = uiPos / 64;
			uint32_t uiKey = uiPos % 64;
			return m_pArray[uiNo][uiKey];
		}
		return false;
	}
	void reset() {
		uint32_t uiSet = m_uiSize / 64 + 1;
		if (m_pArray != NULL) {
			for (uint32_t ui = 0; ui < uiSet; ui++) {
				m_pArray[ui].reset();
			}
		}
	}
private:
	uint32_t m_uiSize;
	bitset<64> * m_pArray;
};

#endif /* BITSET_HPP_ */
